home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / dev / gui / ClassFree_src.lha / ClassFree_src / CFlistviewclass / class.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-11-08  |  4.6 KB  |  192 lines

  1. /* Sample class  for StormC*/
  2.  
  3. #include <clib/alib_protos.h>
  4. #include <proto/intuition.h>
  5. #include <proto/utility.h>
  6. #include <exec/libraries.h>
  7. #include <intuition/icclass.h>
  8. #include <intuition/classes.h>
  9. #include <dos/dos.h>
  10. #include "class.h"
  11. #include "CFlist.h"
  12. #include "CFscroller.h"
  13. #include "CFgroupg.h"
  14. #include "CFlistview.h"
  15. #ifdef DEBUG
  16.  #include "debug_protos.h"
  17.  extern APTR console;
  18. #endif
  19.  
  20. Class *initclass(struct classbase *base)
  21. {
  22.   Class *cl;
  23.  
  24.   if(cl = MakeClass(CFlistviewClassName,GROUPGCLASS,NULL,
  25.         sizeof(struct objectdata),NULL))
  26.   {
  27.     cl->cl_Dispatcher.h_Entry = hookEntry;
  28.     cl->cl_Dispatcher.h_SubEntry = dispatcher;
  29.     AddClass(cl);
  30.   }
  31.   base->cl = cl;
  32.  
  33.   return(cl);
  34. }
  35.  
  36. BOOL removeclass(struct classbase *base)
  37. {
  38.   BOOL result;
  39.  
  40.   if(result = FreeClass(base->cl)) base->cl = NULL;
  41.  
  42.   return(result);
  43. }
  44.  
  45. ULONG dispatcher(Class *cl,Object *o,Msg msg)
  46. {
  47.   switch(msg->MethodID)
  48.   {
  49.     case OM_NEW:
  50.       return(newobject(cl,o,msg));
  51.     case GM_RENDER:
  52.       return(render(cl,o,msg));
  53.     default:
  54.       return(DoSuperMethodA(cl,o,msg));
  55.   }
  56. }
  57.  
  58.  
  59. ULONG newobject(Class *cl,Object *o,Msg msg)
  60. {
  61.   struct opSet *set = (struct opSet *)msg;//,gset;
  62.   struct Gadget *gad;
  63.   struct objectdata *dt;
  64.   struct TagItem *attrs = set->ops_AttrList;//,tags[5];
  65.   ULONG width,height,top,read,sel,dri;
  66.   struct List *labels;
  67.   struct Node *label;
  68.   WORD count = 0;
  69.  
  70. #ifdef DEBUG
  71.   DLprintf(console,"Newobject called\n");
  72. #endif
  73.   if(!(dri = GetTagData(GA_DrawInfo,0,attrs))) goto error;
  74.   width = GetTagData(GA_Width,50,attrs);
  75.   height = GetTagData(GA_Height,40,attrs);
  76.   labels = (struct List *)GetTagData(CFLV_Labels,NULL,attrs);
  77.   top = GetTagData(CFLV_Top,0,attrs);
  78.   read = GetTagData(CFLV_ReadOnly,0,attrs);
  79.   sel = GetTagData(CFLV_Selected,0,attrs);
  80. /*
  81.   gset.MethodID = OM_NEW;
  82.   gset.ops_AttrList = tags;
  83.   gset.ops_GInfo = NULL;
  84.   tags[0].ti_Tag = GA_Left; tags[0].ti_Data = GetTagData(GA_Left,0,attrs);
  85.   tags[1].ti_Tag = GA_Top; tags[1].ti_Data = GetTagData(GA_Top,0,attrs);
  86.   tags[2].ti_Tag = TAG_DONE;
  87. */
  88.   if(gad = (struct Gadget *)DoSuperMethodA(cl,o,msg))
  89.   {
  90. #ifdef DEBUG
  91.   DLprintf(console,"Groupgadget object created\n");
  92. #endif
  93.     dt = (struct objectdata *)INST_DATA(cl,gad);
  94.     dt->lcnt = 0;
  95.     /* Listview always sends IDCMP_GADGETUP messages */
  96.     gad->Activation |= GACT_RELVERIFY;
  97.     if(labels)
  98.     {
  99.       label = labels->lh_Head;
  100.       while(label->ln_Succ)
  101.       {
  102.         dt->lcnt++;
  103.         label = label->ln_Succ;
  104.       }
  105.     }
  106.     if(dt->list = (struct Gadget *)NewObject(NULL,CFlistClassName,
  107.             GA_Left, 0, GA_Top, 0,
  108.             GA_Width, width-18, GA_Height, height,
  109.             CFL_Labels, labels,
  110.             CFL_Top, top,
  111.             CFL_ReadOnly, read,
  112.             CFL_Selected, sel,
  113.             TAG_DONE))
  114.     {
  115. #ifdef DEBUG
  116.   DLprintf(console,"CFlist object created\n");
  117. #endif
  118.       dt->tagmap[0].ti_Tag = CFSC_Top; dt->tagmap[0].ti_Data = CFL_Top;
  119.       dt->tagmap[1].ti_Tag = TAG_DONE;
  120.       if(dt->scrl = (struct Gadget *)NewObject(NULL,CFscrollerClassName,
  121.             GA_Left, width-18, GA_Top, 0,
  122.             GA_Height, height,
  123.             GA_DrawInfo, dri,
  124.             CFSC_Freedom, FREEVERT,
  125.             CFSC_Top, top, CFSC_Visible, 0, CFSC_Total, dt->lcnt,
  126.             CFSC_Size, SIZE_MEDRES,
  127.             GA_ID, GID_SCRL,
  128.             ICA_TARGET, dt->list,
  129.             ICA_MAP, dt->tagmap,
  130.             TAG_DONE))
  131.       {
  132. #ifdef DEBUG
  133.   DLprintf(console,"CFscroller object created\n");
  134. #endif
  135.         DoMethod((Object *)gad,OM_ADDMEMBER,dt->list);
  136.         DoMethod((Object *)gad,OM_ADDMEMBER,dt->scrl);
  137. #ifdef DEBUG
  138.   DLprintf(console,"Gadget created - returning\n");
  139. #endif
  140.         return((ULONG)gad);
  141.       }
  142.       DisposeObject(dt->list);
  143.     }
  144.     DoMethod((Object *)gad,OM_DISPOSE)
  145.   }
  146.   error:
  147. #ifdef DEBUG
  148.   DLprintf(console,"Error!!\n");
  149. #endif
  150.   return(NULL);
  151. }
  152. /*
  153. ULONG update(Class *cl,Object *o,Msg msg)
  154. {
  155.   struct opUpdate *upd = (struct opUpdate *)msg;
  156.   struct objectdata *dt = (struct objectdata *)INST_DATA(cl,o);
  157.   struct TagItem *attrs = upd->opu_AttrList;
  158.   ULONG gid;
  159.  
  160.   attr
  161.  
  162.  
  163. }
  164. */
  165.  
  166. ULONG render(Class *cl,Object *o,Msg msg)
  167. {
  168.   struct gpRender *rend = (struct gpRender *)msg;
  169.   struct objectdata *dt = (struct objectdata *)INST_DATA(cl,o);
  170.   struct opGet get;
  171.   struct opSet set;
  172.   struct TagItem tag[3];
  173.   ULONG vis;
  174.  
  175.   if(rend->gpr_Redraw&GREDRAW_REDRAW)
  176.   {
  177.     DoMethodA((Object *)dt->list,msg);
  178.     get.MethodID = OM_GET;
  179.     get.opg_AttrID = CFL_Visible;
  180.     get.opg_Storage = &vis;
  181.     DoMethodA((Object *)dt->list,(Msg)&get);
  182.     set.MethodID = OM_SET;
  183.     set.ops_AttrList = tag;
  184.     set.ops_GInfo = NULL;
  185.     tag[0].ti_Tag = CFSC_Visible; tag[0].ti_Data = vis;
  186.     tag[1].ti_Tag = TAG_DONE;
  187.     DoMethodA((Object *)dt->scrl,(Msg)&set);
  188.     DoMethodA((Object *)dt->scrl,msg);
  189.     return(1);
  190.   }
  191.   return(DoSuperMethodA(cl,o,msg));
  192. }